package com.ccf.business.database.service;

import com.ccf.business.database.model.Datasource;
import com.ccf.business.database.model.vo.TableVO;
import com.service.database.model.DataModel;
import com.common.model.pojo.Query;
import com.common.model.result.PageResult;
import com.service.mybatis.service.ISuperService;

import java.util.List;
import java.util.Map;


/**
 * 
 *
 * @author ccf
 * @date 2021-11-25 16:42:29
 */
public interface IDatasourceService extends ISuperService<Datasource> {
    /**
     * 列表
     * @param query
     * @return
     */
    PageResult<Datasource> findList(Query query);

    /**
     * 重写提交
     * @param datasource
     */
    boolean submit(Datasource datasource);

    /**
     * 根据数据源ID查询所有的表
     * @param id
     * @return
     */
    List listTables(String id) throws Exception;

    /**
     * 获取表结构信息
     * @param id
     * @param tableName
     * @return
     */
    TableVO getTable(String id, String tableName, String page, String pageSize) throws Exception;

    /**
     * 获取表详情
     * @param id
     * @param tableName
     * @return
     */
    List<Map<String, Object>> getTableDesc(String id, String tableName) throws Exception;
    /**
     * 获取表数据
     * @param id
     * @param tableName
     * @return
     */
    DataModel getTableData(String id, String tableName, Integer pageSize, Integer page) throws Exception;

    /**
     * 测试连接
     * @param datasource
     */
    boolean connect(Datasource datasource);

    /**
     * 搜索表名
     * @return
     */
    List searchTables(String keyword, String datasourceId) throws Exception;

    /**
     * 查询可操作表
     * @param id
     * @return
     */
    List<String> listTablesBySelfBuilt(String id) throws Exception ;

    /**
     * 查询不可操作表
     * @param id
     * @return
     */
    List<String> listTablesExcludeSelfBuilt(String id) throws Exception ;

    /**
     * 搜索指定字段并返回去重值
     * @param id
     * @param tableName
     * @param fieldName
     * @return
     */
    List searchFieldValue(String id, String tableName, String fieldName);
}

